package 进阶阶段;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class demo29TCP通信程序_服务器 {
    public static void main(String[] args) throws IOException {
        //两端通信步骤：
        //1. 服务端程序，需要事先启动，等待客户端的连接。
        //2. 客户端主动连接服务器端，连接成功才能通信。服务端不可以主动连接客户端。

        //服务端：ServerSocket类表示。创建ServerSocket对象，相当于开启一个服务，并等待客户端的连接。

        //ServerSocket类：这个类,实现了服务器套接字，该对象,等待通过网络的请求。
            //ServerSocket(int port)：使用该构造方法在创建ServerSocket对象时，就可以将其绑定到一个指定的端口号上，参数port就是端口号。

            //accept()：接收客户端的请求,侦听监听并接受连接，返回一个新的Socket对象，用于和客户端,实现通信。该方法会一直阻塞(暂时等待,如交通阻塞),直到建立连接。

//        ServerSocket server = new ServerSocket(6666);
//        Socket client = server.accept();//接收客户端请求，对象，得到IO流
//
//        //读取
//        InputStream is = client.getInputStream();
//        byte[] arr = new byte[1024];
//        int read = is.read(arr);
//        System.out.println(new String(arr , 0 , read));
//
//        //写入
//        OutputStream os = client.getOutputStream();
////        os.write("在的，有什么事吗？".getBytes());
//        os.write(new Scanner(System.in).nextLine().getBytes());
//
//        //读取
//        byte[] arr1 = new byte[1024];
//        int read1 = is.read(arr1);
//        System.out.println(new String(arr1 , 0 , read1));
//
////        os.write("有空的".getBytes());
//        os.write(new Scanner(System.in).nextLine().getBytes());
//
//        client.close();

        System.out.println("----------------------------------------");
        System.out.println("写死循环重复接受和发送信息");

        ServerSocket server = new ServerSocket(6666);

        while (true){
            Socket client = server.accept();//暂时等待

            new Thread(){//线程同步
                @Override
                public void run() {
                    try {
                        //读取
                        InputStream is = client.getInputStream();
                        byte[] arr = new byte[1024];
                        int read = is.read(arr);
                        System.out.println(new String(arr , 0 , read));

                        //写入
                        OutputStream os = client.getOutputStream();
                        os.write(new Scanner(System.in).nextLine().getBytes());

                        client.close();
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }

                }
            }.start();

        }

    }
}
